package org.bibpessoal.mbeans;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.bibpessoal.entidades.Amizade;
import org.bibpessoal.entidades.Usuario;
import org.bibpessoal.exceptions.UsuarioInvalidoException;
import org.bibpessoal.fachada.BiblitoecaPessoalFachada;

@ManagedBean(name="usuarioMB")
@SessionScoped
public class UsuarioMB {
	@EJB
	private BiblitoecaPessoalFachada fachada;

	private String login;
	private String senha;
	private Usuario usuario;
	private String mensagem;
	private List<Usuario> usuarios;
	@SuppressWarnings("unused")
	private List<Amizade> solicitacoes;
	@SuppressWarnings("unused")
	private List<Usuario> amigos;

	public UsuarioMB() {
		super();
		this.usuario = null;
		this.mensagem = null;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public String getMensagem() {
		String retorno = mensagem;
		mensagem = null;
		return retorno;
	}
	public boolean isComMensagem() {
		return mensagem != null;
	}
	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public String autenticar() {
		try {
			usuario = fachada.autenticarUsuario(login, senha);
		} catch (UsuarioInvalidoException e) {
			this.mensagem = e.getMessage();
			return "index.jsp";
		}
		return "biblioteca.jsp";
	}

	public String redirectCadastro(){
		usuario = new Usuario();
		return "cadastro.jsp";
	}

	public String cadastrar(){
		try {
			if(!usuario.getSenha().equals(senha)){
				this.mensagem = "Confirmação de Senha não Confere!!";
				return "cadastro.jsp";
			}
			fachada.cadastrarUsuario(usuario);
		} catch (UsuarioInvalidoException e) {
			this.mensagem = e.getMessage();
			return "index.jsp";
		}
		return "biblioteca.jsp";
	}
	public List<Usuario> getUsuarios() {
		return usuarios;
	}
	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}
	public String listarOutrosUsuarios() throws UsuarioInvalidoException{
		usuarios = fachada.getOutrosUsuarios(usuario.getId());
		return "listar.jsp";
	}
	public List<Amizade> getSolicitacoes() {
		List<Amizade> solic = usuario.getAmigosde();
		List<Amizade> solicAtivas = new ArrayList<Amizade>();
		for (Amizade amizade : solic) {
			if(amizade.getAtivo() && !amizade.isAceito()){
				solicAtivas.add(amizade);
				System.out.println("solic: "+amizade.getUsuario1().getNome());
			}
		}
		return solicAtivas;
	}
	public List<Usuario> getAmigos() {
		List<Usuario> abiguinhos = new ArrayList<Usuario>();  
		for (Amizade amizade : usuario.getAmigos()) {
			if(amizade.isAceito()){
				abiguinhos.add(amizade.getUsuario2());
			}
		}
		for (Amizade amizade : usuario.getAmigosde()) {
			if(amizade.isAceito()){
				abiguinhos.add(amizade.getUsuario1());
			}
		}
		return abiguinhos;
	}
	public void setAmigos(List<Usuario> amigos) {
		this.amigos = amigos;
	}
	public void setSolicitacoes(List<Amizade> solicitacoes) {
		this.solicitacoes = solicitacoes;
	}
	public String solicitarAmizade(Usuario usuarioSolicitado){
		Amizade amizade = new Amizade();
		amizade.setUsuario1(usuario);
		amizade.setUsuario2(usuarioSolicitado);
		amizade.setAceito(false);
		amizade.setAtivo(true);
		fachada.solicitarAmizade(amizade);
		return "";
	}
	
	public String aceitarSolicitacao(Amizade amizade){
		amizade.setAceito(true);
		amizade.setAtivo(false);
		fachada.responderSolicitacao(amizade);
		return "";
	}
	
	public String recusarSolicitacao(Amizade amizade){
		amizade.setAceito(false);
		amizade.setAtivo(false);
		fachada.responderSolicitacao(amizade);
		return "";
	}
}
